package czk.concrent.threadpool.lockinthreadpool;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池中的锁；
 * 1 ReentrantLock 的mainLock锁，主要是为了维护largestPoolSize，和防止中断风暴
 * 2 worker继承了同步阻塞器，在里面主要是试了实现不可重入锁防止->自定义 worker 类的大前提是为了维护中断状态，因为正在执行任务的线程是不应该被中断的。
 *
 * @Author:ChenZhangKun
 * @Date: 2022/9/20 16:11
 */
public class LockInThreadPool {
    public static void main(String[] args) {
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                2,
                5,
                10L,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(10)
        );
        // 预热线程
        pool.prestartAllCoreThreads();
        int largestPoolSize = pool.getLargestPoolSize();
        System.out.println(largestPoolSize);
        System.out.println(pool.getActiveCount());
    }
}
